using System;
using System.Collections;
using System.Data;
using System.Data.SqlClient;
using SystemFrameworks;
using Microsoft.ApplicationBlocks.Data;
using Common; using MinCultura.Sipa.DataAccess.EntidadesArtes;
using SystemFrameworks;

namespace MinCultura.Sipa.EntidadesArtes
{
	/// <summary>
	/// Clase de acceso a datos para la entidad ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA
	/// </summary>
	public class InfraestructuraEntidadesTramoya
	{
		#region Private Data Access Atributes

		private const String INF_ID_PARAM = "@INF_ID";
		private const String INF_TIENE_PARRILLA_PARAM = "@INF_TIENE_PARRILLA";
		private const String INF_ALTURA_PARRILLA_PARAM = "@INF_ALTURA_PARRILLA";
		private const String INF_AREA_PARRILLA_PARAM = "@INF_AREA_PARRILLA";
		private const String INF_TIENE_CALLES_PARAM = "@INF_TIENE_CALLES";
		private const String INF_NUMERO_CALLES_MANULES_PARAM = "@INF_NUMERO_CALLES_MANULES";
		private const String INF_NUMERO_CALLES_CONTRAPESADAS_PARAM = "@INF_NUMERO_CALLES_CONTRAPESADAS";
		private const String INF_NUMERO_CALLES_MOTORIZADAS_PARAM = "@INF_NUMERO_CALLES_MOTORIZADAS";
		private const String INF_NUMERO_BARRAS_FIJAS_PARAM = "@INF_NUMERO_BARRAS_FIJAS";
		private const String INF_TIENE_TELON_BOCA_PARAM = "@INF_TIENE_TELON_BOCA";
		private const String INF_TIENE_CAMARA_NEGRA_PARAM = "@INF_TIENE_CAMARA_NEGRA";
		private const String INF_NUMERO_BAMBALINAS_PARAM = "@INF_NUMERO_BAMBALINAS";
		private const String INF_NUMERO_PATAS_PARAM = "@INF_NUMERO_PATAS";
		private const String INF_NUMERO_FONDOS_PARAM = "@INF_NUMERO_FONDOS";
		private const String INF_TIENE_CICLORAMA_PARAM = "@INF_TIENE_CICLORAMA";
		private const String INF_MATERIAL_CICLORAMA_PARAM = "@INF_MATERIAL_CICLORAMA";
		private const String INF_MEDIDAS_CICLORAMA_PARAM = "@INF_MEDIDAS_CICLORAMA";

		#endregion Private Data Access Atributes

		/// <summary>
		/// Constructor de la clase ARTINFRAESTRUCTURAENTIDADESTRAMOYA
		/// </summary>
        public InfraestructuraEntidadesTramoya(string strCadenaConecxion)
        {
            ConnectionString = strCadenaConecxion;
        }

        private string _cadenaConexion;

        public string ConnectionString
        {
            get { return _cadenaConexion; }
            set { _cadenaConexion = value; }
        }

		public InfraestructuraEntidadesTramoyaData BuscarInfraestructuraEntidadesTramoya()
		{
			InfraestructuraEntidadesTramoyaData response = new InfraestructuraEntidadesTramoyaData();
			SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_BUSCAR_ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA", response);
			if (response.Rows.Count == 0)
				return null;
			return response;
		}


		public InfraestructuraEntidadesTramoyaData ConsultarInfraestructuraEntidadesTramoya(decimal parINF_ID)
		{
			InfraestructuraEntidadesTramoyaData response = new InfraestructuraEntidadesTramoyaData();

			SqlParameter param1 = new SqlParameter(INF_ID_PARAM, parINF_ID);

			SqlParameter[] parameters = {param1};
			SqlHelper.ExecuteDataTable(this.ConnectionString, CommandType.StoredProcedure, "PAS_CONSULTAR_ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA", response, parameters);
			if (response.Rows.Count == 0)
				return null;
			return response;
		}

		public void Adicionar(InfraestructuraEntidadesTramoyaData datos,params SqlTransaction[] transaccion)
		{
			try
			{
				foreach (DataRow row in datos.Rows)
				{
					SqlParameter param1 = new SqlParameter(INF_ID_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_ID_FIELD]);
					SqlParameter param2 = new SqlParameter(INF_TIENE_PARRILLA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_TIENE_PARRILLA_FIELD]);
					SqlParameter param3 = new SqlParameter(INF_ALTURA_PARRILLA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_ALTURA_PARRILLA_FIELD]);
					SqlParameter param4 = new SqlParameter(INF_AREA_PARRILLA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_AREA_PARRILLA_FIELD]);
					SqlParameter param5 = new SqlParameter(INF_TIENE_CALLES_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_TIENE_CALLES_FIELD]);
					SqlParameter param6 = new SqlParameter(INF_NUMERO_CALLES_MANULES_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_CALLES_MANULES_FIELD]);
					SqlParameter param7 = new SqlParameter(INF_NUMERO_CALLES_CONTRAPESADAS_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_CALLES_CONTRAPESADAS_FIELD]);
					SqlParameter param8 = new SqlParameter(INF_NUMERO_CALLES_MOTORIZADAS_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_CALLES_MOTORIZADAS_FIELD]);
					SqlParameter param9 = new SqlParameter(INF_NUMERO_BARRAS_FIJAS_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_BARRAS_FIJAS_FIELD]);
					SqlParameter param10 = new SqlParameter(INF_TIENE_TELON_BOCA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_TIENE_TELON_BOCA_FIELD]);
					SqlParameter param11 = new SqlParameter(INF_TIENE_CAMARA_NEGRA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_TIENE_CAMARA_NEGRA_FIELD]);
					SqlParameter param12 = new SqlParameter(INF_NUMERO_BAMBALINAS_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_BAMBALINAS_FIELD]);
					SqlParameter param13 = new SqlParameter(INF_NUMERO_PATAS_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_PATAS_FIELD]);
					SqlParameter param14 = new SqlParameter(INF_NUMERO_FONDOS_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_FONDOS_FIELD]);
					SqlParameter param15 = new SqlParameter(INF_TIENE_CICLORAMA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_TIENE_CICLORAMA_FIELD]);
					SqlParameter param16 = new SqlParameter(INF_MATERIAL_CICLORAMA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_MATERIAL_CICLORAMA_FIELD]);
					SqlParameter param17 = new SqlParameter(INF_MEDIDAS_CICLORAMA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_MEDIDAS_CICLORAMA_FIELD]);

					SqlParameter[] parameters = {param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17};

					if (transaccion.Length >0)
					{
						SqlHelper.ExecuteNonQuery(transaccion[0], CommandType.StoredProcedure, "PAS_ADICIONAR_ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA", parameters);
					}
					else
					{
						SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ADICIONAR_ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA", parameters);
					}
				}
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ADICIONAR_ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "PAS_ADICIONAR_ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), ex);
			}
		}

		public void Adicionar(InfraestructuraEntidadesTramoyaData datos, InfraestructuraTelonesData datosTelones)
		{
            InfraestructuraTelones objTelones = new InfraestructuraTelones(ConnectionString);
	
			try
			{
				decimal decINF_ID = Convert.ToDecimal(datos.Rows[0][InfraestructuraEntidadesTramoyaData.INF_ID_FIELD]);

				Adicionar(datos);
				objTelones.AdicionarInfraestructuraTelones(datosTelones, decINF_ID);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), ex);
			}
		}

		public void AdicionarInfraestructuraEntidadesTramoya(InfraestructuraEntidadesTramoyaData datos, InfraestructuraTelonesData datosTelones)
		{
            InfraestructuraTelones objTelones = new InfraestructuraTelones(ConnectionString);

			SqlConnection objCon = new SqlConnection(this.ConnectionString);
			objCon.Open();
			SqlTransaction objTran = objCon.BeginTransaction(IsolationLevel.Serializable);
		
			try
			{
				decimal decINF_ID = Convert.ToDecimal(datos.Rows[0][InfraestructuraEntidadesTramoyaData.INF_ID_FIELD]);

				Adicionar(datos,objTran);

				objTelones.AdicionarInfraestructuraTelones(datosTelones, decINF_ID, objTran);

				objTran.Commit();
			}
			catch (SqlException sqlEx)
			{
				objTran.Rollback();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), sqlEx);
			}
			catch (Exception ex)
			{
				objTran.Rollback();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), ex);
			}
			finally
			{
				objCon.Close();
			}
		}


		private void Actualizar(InfraestructuraEntidadesTramoyaData datos,params SqlTransaction[] transaccion)
		{			
			try
			{
				DataRow row = datos.Rows[0];

				SqlParameter param1 = new SqlParameter(INF_ID_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_ID_FIELD]);
				SqlParameter param2 = new SqlParameter(INF_TIENE_PARRILLA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_TIENE_PARRILLA_FIELD]);
				SqlParameter param3 = new SqlParameter(INF_ALTURA_PARRILLA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_ALTURA_PARRILLA_FIELD]);
				SqlParameter param4 = new SqlParameter(INF_AREA_PARRILLA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_AREA_PARRILLA_FIELD]);
				SqlParameter param5 = new SqlParameter(INF_TIENE_CALLES_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_TIENE_CALLES_FIELD]);
				SqlParameter param6 = new SqlParameter(INF_NUMERO_CALLES_MANULES_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_CALLES_MANULES_FIELD]);
				SqlParameter param7 = new SqlParameter(INF_NUMERO_CALLES_CONTRAPESADAS_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_CALLES_CONTRAPESADAS_FIELD]);
				SqlParameter param8 = new SqlParameter(INF_NUMERO_CALLES_MOTORIZADAS_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_CALLES_MOTORIZADAS_FIELD]);
				SqlParameter param9 = new SqlParameter(INF_NUMERO_BARRAS_FIJAS_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_BARRAS_FIJAS_FIELD]);
				SqlParameter param10 = new SqlParameter(INF_TIENE_TELON_BOCA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_TIENE_TELON_BOCA_FIELD]);
				SqlParameter param11 = new SqlParameter(INF_TIENE_CAMARA_NEGRA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_TIENE_CAMARA_NEGRA_FIELD]);
				SqlParameter param12 = new SqlParameter(INF_NUMERO_BAMBALINAS_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_BAMBALINAS_FIELD]);
				SqlParameter param13 = new SqlParameter(INF_NUMERO_PATAS_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_PATAS_FIELD]);
				SqlParameter param14 = new SqlParameter(INF_NUMERO_FONDOS_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_NUMERO_FONDOS_FIELD]);
				SqlParameter param15 = new SqlParameter(INF_TIENE_CICLORAMA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_TIENE_CICLORAMA_FIELD]);
				SqlParameter param16 = new SqlParameter(INF_MATERIAL_CICLORAMA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_MATERIAL_CICLORAMA_FIELD]);
				SqlParameter param17 = new SqlParameter(INF_MEDIDAS_CICLORAMA_PARAM, row[InfraestructuraEntidadesTramoyaData.INF_MEDIDAS_CICLORAMA_FIELD]);

				SqlParameter[] parameters = {param1, param2, param3, param4, param5, param6, param7, param8, param9, param10, param11, param12, param13, param14, param15, param16, param17};

				if (transaccion.Length > 0)
				{
					SqlHelper.ExecuteNonQuery(transaccion[0], CommandType.StoredProcedure, "PAS_ACTUALIZAR_ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA", parameters);
				}
				else
				{
					SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ACTUALIZAR_ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA", parameters);
				}				
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "PAS_ACTUALIZAR_ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "PAS_ACTUALIZAR_ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), ex);
			}
		}

		public void Actualizar(InfraestructuraEntidadesTramoyaData datos, InfraestructuraTelonesData datosTelones)
		{
            InfraestructuraTelones objTelones = new InfraestructuraTelones(ConnectionString);
			decimal decINF_ID = 0;
			try
			{
				decINF_ID = Convert.ToDecimal(datos.Rows[0][InfraestructuraEntidadesTramoyaData.INF_ID_FIELD]);

				Actualizar(datos);
				objTelones.ActualizarInfraestructuraTelones(datosTelones, decINF_ID);				
			}
			catch (Exception ex)
			{				
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), ex);
			}
		}

		public void ActualizarInfraestructuraEntidadesTramoya(InfraestructuraEntidadesTramoyaData datos, InfraestructuraTelonesData datosTelones)
		{
            InfraestructuraTelones objTelones = new InfraestructuraTelones(ConnectionString);

			SqlConnection objCon = new SqlConnection(this.ConnectionString);
			objCon.Open();
			SqlTransaction objTran = objCon.BeginTransaction(IsolationLevel.Serializable);

			decimal decINF_ID = 0;

			try
			{
				decINF_ID = Convert.ToDecimal(datos.Rows[0][InfraestructuraEntidadesTramoyaData.INF_ID_FIELD]);

				Actualizar(datos,objTran);
				objTelones.ActualizarInfraestructuraTelones(datosTelones, decINF_ID, objTran);

				objTran.Commit();
			}
			catch (SqlException sqlEx)
			{
				objTran.Rollback();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), sqlEx);
			}
			catch (Exception ex)
			{
				objTran.Rollback();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorInsertar", "ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), ex);
			}
			finally
			{
				objCon.Close();
			}
		}

		/// <summary>
		/// Elimina un registro de la entidad Artinfraestructuraentidadestramoya
		/// </summary>
		/// <param name="parINF_ID">Identificador del registro
		public void EliminarInfraestructuraEntidadesTramoya(decimal parINF_ID)
		{
			try
			{
				SqlParameter param1 = new SqlParameter(INF_ID_PARAM, parINF_ID);

				SqlParameter[] parameters = {param1};
				SqlHelper.ExecuteNonQuery(this.ConnectionString, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA", parameters);
			}
			catch (SqlException sqlEx)
			{
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), sqlEx);
			}
			catch (Exception ex)
			{
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), ex);
			}
		}

		public void EliminarInfraestructuraEntidadesTramoya(ArrayList arrIDs)
		{
			SqlConnection objConnection = new SqlConnection(ConnectionString);
			objConnection.Open();
			SqlTransaction objTrans = objConnection.BeginTransaction();

			try
			{
				foreach (object Item in arrIDs)
				{
					SqlParameter param1 = new SqlParameter(INF_ID_PARAM, decimal.Parse(Item.ToString()));
					SqlParameter[] parameters = {param1};
					SqlHelper.ExecuteNonQuery(objTrans, CommandType.StoredProcedure, "PAS_ELIMINAR_ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA", parameters);
				}
				objTrans.Commit();
			}
			catch (SqlException sqlEx)
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.DisplaySqlErrors(sqlEx, "ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), sqlEx);
			}
			catch (Exception ex)
			{
				objTrans.Rollback();
				throw new ApplicationExceptionManager(Utilidad.TraerMensaje("gmsgErrorEliminar", "ART_INFRAESTRUCTURA_ENTIDADES_TRAMOYA"), ex);
			}
			finally
			{
				objConnection.Close();
			}
		}
	}
}